// 全局守卫
// 这里是抽离全局守卫
// 步骤:
//  1.导入实例好的router对象
//  2.配置router里面的导航守卫
//  3.把该文件导入main.ts即可('@/router/permission')
// 原理:
//  vue只认挂载自己身上的router配置,
//  在mian.ts,导入了router实例,然后又导入了这个文件(等于把这里代码写到了main.ts里),
//  等于在router实例设置了全局守卫,然后再挂载到vue上,所以这里的导航守卫会生效
import router from './index'
import { useUserStore } from '@/store/modules/user'

const whitePage = ['/login', '/404']
router.beforeEach(async (to, form, next) => {
  const { token, userInfo, getUserInfo } = useUserStore()
  if (token) {
    if (to.fullPath.toLowerCase() === '/login') {
      next('/')
    } else {
      if (!userInfo.userId) {
        await getUserInfo()
        // router.addRoute添加路由配置需要重走导航前置守卫才会生效
        next({ ...to, replace: true })
      } else {
        next()
      }
    }
  } else {
    if (whitePage.includes(to.fullPath.toLowerCase())) {
      next()
    } else {
      next('/login')
    }
  }
})
